#include <iostream>
#include <fstream> // 文件流

int main()
{
#if 0
    // 文件输出流
    std::ofstream f("./telephone.txt");
    if (!f.is_open())
    {
        std::cout << "打开文件失败!\n";
        return -1;
    }
    std::cout << "打开文件成功!\n" << std::endl;
    f << "hello" << "\n" << "world";
    f.close();
#endif

#if 0
    // 文件输入流：指的是文件输入到内存当中
    std::ifstream input("./telephone.txt");
    if(!input.is_open())
    {
        std::cout << "打开文件失败!\n";
        return -1;
    }
    // 判断文件是否到末尾
    while(input.eof() == false)
    {
        std::string str;
        input >> str;
        std::cout << "读到字符串:" << str << std::endl; 
    }
    
    input.close();
#endif

#if 0
    std::ifstream input("./telephone.txt");
    if(!input.is_open())
    {
        std::cout << "打开文件失败!\n";
        return -1;
    }
    // 光标移动到开头
    // std::ios::cur; // 移动到当前
    // std::ios::end; // 移动到末尾
    // 一个参数：移到某一个位置（5就是移到第五个字节的位置）
    input.seekg(5);
    // 两个参数：
    input.seekg(0, std::ios::end);
    // 计算光标相对于当前文字的偏移量
    auto size = input.tellg();
    std::cout << size << std::endl;
    
    input.close();
#endif

#if 1
    // 文件流
    // 默认为读写形式（有两个光标，一个读的，一个写的）
    std::fstream f("./telephone.txt"); // 追加
    std::cout << f.tellg() << std::endl;
    std::cout << f.tellp() << std::endl;

    f.seekg(5);
    f.seekp(4);
    std::cout <<f.tellg() << std::endl;
    std::cout <<f.tellp() << std::endl;
#endif
    return 0;
}